package com.itbaizhan;

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import sun.misc.BASE64Encoder;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/*MD%消息摘要算法*/
public class MD5demo {

    public static void main(String[] args) throws NoSuchAlgorithmException {
        //1,原文
        String input = "itbaizhan";
        //2算法
        String algorithm = "MD5";

        //获取消息摘要对象
        MessageDigest instance = MessageDigest.getInstance(algorithm);

        //获取消息摘要的字节数组
        byte[] digest = instance.digest(input.getBytes());
        //加密后编码表找不到对应字符, 出现乱码,base64 编码就可以解决
        //System.out.println(new String(digest));

        //base64编码
        //这样直接打印会报错
        //System.out.println(Base64.encode(digest));

        BASE64Encoder encoder = new BASE64Encoder();
        System.out.println(encoder.encode(digest));//xDCo+ksHiej/JY6FqeBZcg==





    }
}
/*摘要算法就是我们常说的散列函数、哈希函数（Hash Function），它能够把任意长度的数据“压缩”成固定长度、而且独一无二的“摘要”字符串，就好像是给这段数据生成了一个数字“指纹”。

作用：

保证信息的完整性

特点
不可逆：只有算法，没有秘钥，只能加密，不能解密
难题友好性：想要破解，只能暴力枚举
发散性：只要对原文进行一点点改动，摘要就会发生剧烈变化抗
碰撞性：原文不同，计算后的摘要也要不同
常见算法
MD5
SHA1
SHA256
SHA512*/